Para cargar las librerías
# Importante librerias o modulos que se van a usar en esta sesion
import os, sys
import numpy as np
import pandas as pd
import pandas_profiling ####Verificar que esté instalada.
##Librerías para graficar
import matplotlib
matplotlib.style.use('ggplot')
from matplotlib import pyplot as plt
#### Configuración del directorio
%cd C:\Users\USUARIO\Documents\Monitoria_cda_2019_2\Clases_Python\Clase1_Python_ams
###Lectura de los datos
data=pd.read_csv('listings.csv')
A continuación, se va seleccionar únicamente las variables necesarias para nuestro análisis.
data_analisis=data.loc[:, ['id','room_type', 'name', 'summary', 'minimum_nights', 'maximum_nights','space', 'bathrooms', 'bedrooms', 'bed_type', 'price', 'weekly_price',
'monthly_price', 'neighbourhood', 'city', 'state', 'country','first_review','last_review', 'review_scores_rating', 'number_of_reviews','has_availability', 'availability_30', 'availability_60',
'availability_90', 'availability_365']]
A continuación se detalla el tipo de datos
data_analisis.dtypes
Se realiza la correción de las variables asociadas a precio.
##Correción de las variables asociadas a precio
def eliminar_pesos(x):
x['monthly_price']=str(x['monthly_price']).replace('$','')
return x['monthly_price']
def eliminar_pesos_2(x):
x['weekly_price']=str(x['weekly_price']).replace('$','')
return x['weekly_price']
def eliminar_pesos_3(x):
x['price']=str(x['price']).replace('$','')
return x['price']
data_analisis['monthly_price']=data_analisis.apply(eliminar_pesos,axis=1)
data_analisis['weekly_price']=data_analisis.apply(eliminar_pesos_2,axis=1)
data_analisis['price']=data_analisis.apply(eliminar_pesos_3,axis=1)
def eliminar_coma(x):
x['monthly_price']=str(x['monthly_price']).replace(',','')
return x['monthly_price']
def eliminar_coma_2(x):
x['weekly_price']=str(x['weekly_price']).replace(',','')
return x['weekly_price']
def eliminar_coma_3(x):
x['price']=str(x['price']).replace(',','')
return x['price']
data_analisis['monthly_price']=data_analisis.apply(eliminar_coma,axis=1)
data_analisis['weekly_price']=data_analisis.apply(eliminar_coma,axis=1)
data_analisis['price']=data_analisis.apply(eliminar_coma,axis=1)
##Correción del tipo de datos
data_analisis["price"]=data_analisis["price"].astype(float)
data_analisis["weekly_price"]=data_analisis["price"].astype(float)
data_analisis["monthly_price"]=data_analisis["price"].astype(float)
data_analisis.dtypes
A continuación se realiza un pandas profiling de la data resultante.
pandas_profiling.ProfileReport(data_analisis)
A continuación se realiza una función que permite identificar el porcentaje de missing de todas las variables de la tabla.
def missing_values_table(df):
mis_val = df.isnull().sum()
mis_val_percent = 100 * df.isnull().sum()/len(df)
mis_val_table = pd.concat([mis_val, mis_val_percent], axis=1)
mis_val_table_ren_columns = mis_val_table.rename(
columns = {0 : 'Missing Values', 1 : '% of Total Values'})
return mis_val_table_ren_columns
missing_values_table(data_analisis)
A continuación, se realizará un análisis sobre el conjunto de datos "Summary information and metrics for listings in Amsterdam (good for visualisations)."
#### Configuración del directorio
%cd C:\Users\USUARIO\Documents\Monitoria_cda_2019_2\Clases_Python\Clase2_Python
###Lectura de los datos
data_analisis_summary=pd.read_csv('listings2.csv')
data_analisis_summary.head()
data_analisis_summary.dtypes
data_analisis_summary.shape
data_analisis.shape
missing_values_table(data_analisis_summary)
data_analisis_summary.neighbourhood_group.unique() ###El 100% es missing.
data_analisis_summary.neighbourhood.unique()
data_analisis_summary.neighbourhood.describe()
pd.value_counts(data_analisis_summary['neighbourhood'])
100 * data_analisis_summary['neighbourhood'].value_counts() / len(data_analisis_summary['neighbourhood'])
Aveces los resultados son más fáciles de mostrar a través de un gráfico.
plot_frec_abs = data_analisis_summary['neighbourhood'].value_counts().plot(kind='bar', title='neighbourhood')
plot_frec_rel = (100 * data_analisis_summary['neighbourhood'].value_counts() / len(data_analisis_summary['neighbourhood'])).plot(
kind='bar', title='neighbourhood %')
data_analisis_summary['price'].describe()
data_analisis_summary.hist('price',figsize=(8,8),bins=20)
El gráfico anterior, permite evidenciar que la variable precio tiene un conjunto de datos atípicos y por lo tanto, no es posible visualizar la distribución. A continuación, se visualizará únicamente aquellas observaciones cuyo precio es menor o igual a 180.
data_analisis_summary[data_analisis_summary.price <=180].hist('price',figsize=(8,8),bins=10)
data_analisis_summary[data_analisis_summary.price <=180].boxplot('price')
data_analisis_summary.pivot_table(values='price',columns='neighbourhood',aggfunc=np.mean)
data_analisis_summary.boxplot('price',by="neighbourhood", figsize=(8,8))
#plt.xticks(rotation=25)
#plt.xlabel('hi',rotation=60)
plt.title("Boxplot")
plt.suptitle("")
plt.xticks(rotation=90)
plt.show()
data_analisis_summary[data_analisis_summary.price <=180].boxplot('price',by="neighbourhood", figsize=(15,8))
#plt.xticks(rotation=25)
#plt.xlabel('hi',rotation=60)
plt.title("Boxplot")
plt.suptitle("")
plt.xticks(rotation=90)
plt.show()
##Se puede realizar el mismo anàlisis "agrupando" por la suma del precio, sin embargo, esto tiene sentido?
data_analisis_summary.pivot_table(values='price',columns='neighbourhood',aggfunc=np.sum)